#pragma once
#ifndef BASEAPPLICATION_H_
#define BASEAPPLICATION_H_

#include "engine.h"
#include "gamemanager.h"
#include "graphicsmanager.h"
#include "inputmanager.h"
#include "audiomanager.h"

namespace EPOC
{
	class TextureSDL;

	class BaseApplication : public Engine
	{
	public:
		BaseApplication();
		virtual ~BaseApplication();

		virtual void Cleanup();
		virtual bool Initialize();
		virtual bool Update(float fTimeDelta);
		virtual void Render(SDL_Renderer* pRenderer);

		virtual void HandleEvent(SDL_Event *pEvent);

		inline class GameManager* GetGameManager()			{ return m_pGameManager;}
		inline class GraphicsManager* GetGraphicsManager()	{ return m_pGraphicsManager;}
		inline class AudioManager* GetAudioManager()		{ return m_pAudioManager;}
		inline class InputManager* GetInputManager()		{ return m_pInputManager;}

	protected:
		virtual bool CreateGameManager();
		virtual bool CreateGraphicsManager();
		virtual bool CreateAudioManager();
		virtual bool CreateInputManager();

	protected:
		GameManager *m_pGameManager;
		GraphicsManager *m_pGraphicsManager;
		AudioManager *m_pAudioManager;
		InputManager *m_pInputManager;
	};
}; // namespace EPOC

#endif